﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
// 原题连接：https://leetcode.cn/problems/maximum-product-of-two-elements-in-an-array/
/*
题目描述：
给你一个整数数组 nums，请你选择数组的两个不同下标 i 和 j，使 (nums[i]-1)*(nums[j]-1) 取得最大值。
请你计算并返回该式的最大值。

 

示例 1：
输入：nums = [3,4,5,2]
输出：12
解释：如果选择下标 i=1 和 j=2（下标从 0 开始），则可以获得最大值，(nums[1]-1)*(nums[2]-1) = (4-1)*(5-1) = 3*4 = 12 。

示例 2：
输入：nums = [1,5,4,5]
输出：16
解释：选择下标 i=1 和 j=3（下标从 0 开始），则可以获得最大值 (5-1)*(5-1) = 16 。

示例 3：
输入：nums = [3,7]
输出：12
 

提示：
2 <= nums.length <= 500
1 <= nums[i] <= 10^3
*/

// 开始解题：
// 方法1——排序
int cmp_int(const void* p1, const void* p2) {
    assert(p1 && p2);
    return *(int*)p1 - *(int*)p2;
}

int maxProduct(int* nums, int numsSize) {
    assert(nums);
    int i = 0;
    for (i = 0; i < numsSize; i++) {
        nums[i]--;
    }
    qsort(nums, numsSize, sizeof(int), cmp_int);
    int max = nums[numsSize - 1];
    int less = nums[numsSize - 2];
    return max * less;
}